/**
 * Created by Administrator on 2016/12/29.
 */
var mongo = require('./db');
var markdown = require('markdown').markdown;
function Post(name, askTitle, askContent, picUrl) {
    //asks的数据
    this.name = name;
    this.askTitle = askTitle;
    this.askContent = askContent;
    this.picUrl = picUrl;
}
module.exports = Post;
//保存提问
Post.prototype.save = function (callback) {
    var date = new Date();
    //保存当前时间的各种格式
    var time = {
        date: date,
        year: date.getFullYear(),
        month: date.getFullYear() + '-' + (date.getMonth() + 1),
        day: date.getFullYear() + '-' +
        (date.getMonth() + 1) + '-' + date.getDate(),
        minute: date.getFullYear() + '-' +
        (date.getMonth() + 1) + '-' + date.getDate() + ' ' +
        date.getHours() + ':' +
        (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()),
        second: date.getFullYear() + '-' +
        (date.getMonth() + 1) + '-' + date.getDate() + ' ' +
        date.getHours() + ':' +
        (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ":" +
        (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()),
    };

    //要保存的数据
    var ask = {
        //提问人
        name: this.name,
        //提问的标题
        askTitle: this.askTitle,
        //提问的内容
        askContent: this.askContent,
        //用户头像信息
        picUrl: this.picUrl,
        time: time,
        //回答
        answers: [],
        //浏览量
        pv: 0
    };
    mongo.open(function (err, db) {
        if (err) {
            return callback(err)
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err)
            }
            collection.insert(ask, {safe: true}, function (err) {
                mongo.close();
                if (err) {
                    return callback(err)
                }
                //没有错误的情况下,保存提问
                callback(null)
            })
        })
    })
};

//获取所有的提问
Post.getTen = function (name, page, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            var query = {};
            if (name) {
                query.name = name;
            }
            //查询
            collection.count(query, function (err, total) {
                //total是查询的文章总数量
                collection.find(query, {
                    //根据当前的页数算出每页开始的位置pageStart
                    skip: (page - 1) * 10,
                    //pageSize 理解为步长
                    limit: 10
                }).sort({
                    time: -1
                }).toArray(function (err, docs) {
                    mongo.close();
                    if (err) {
                        return callback(err);
                    }
                    //此处markdown解析的是文章的内容
                    docs.forEach(function (doc) {
                        doc.askContent = markdown.toHTML(doc.askContent);
                    });
                    callback(null, docs, total);
                })
            })
        })
    })
};
//可以根据用户名,发布时间,文章标题来查询某一篇具体的文章
Post.getOne = function (name, second, askTitle, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err)
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err)
            }
            collection.findOne({
                "name": name,
                "time.second": second,
                "askTitle": askTitle,
            }, function (err, doc) {
                if (err) {
                    mongo.close();
                    return callback(err)
                }
                //增加访问量的代码
                if (doc) {
                    collection.update({
                        "name": name,
                        "time.second": second,
                        "askTitle": askTitle
                    }, {
                        $inc: ({'pv': 1})
                    }, function (err) {
                        mongo.close();
                        if (err) {
                            return callback(err)
                        }
                    })
                }
                // console.log(doc.answers);
                //markdown解析一下
                doc.askContent = markdown.toHTML(doc.askContent);
                doc.answers.forEach(function (answer) {
                    answer.content = markdown.toHTML(answer.content)
                });
                callback(null, doc);
            })
        })
    })
}
//提问编辑
Post.askEdit = function (name, second, askTitle, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err)
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err)
            }
            //根据用户名 发表日期以及提问的标题进行查询
            collection.findOne({
                "name": name,
                "time.second": second,
                "askTitle": askTitle
            }, function (err, doc) {
                mongo.close();
                if (err) {
                    return callback(err)
                }
                //返回问题的原始格式
                callback(null, doc)
            })
        })
    })
}

//编辑之后对文章内容进行更新
Post.update = function (name, second, askTitle, askContent, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err)
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            collection.update({
                "name": name,
                "time.second": second,
                "askTitle": askTitle
            }, {$set: {askContent: askContent}}, function (err) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null);
            })
        })
    })
};
//删除操作
Post.askDelete = function (name, second, askTitle, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            collection.remove({
                "name": name,
                "time.second": second,
                "askTitle": askTitle
            }, {
                w: 1
            }, function (err) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null);
            })
        })
    })
}
//头像上传后对ask集合进行更新
Post.updatePhoto = function (name, picUrl, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            collection.update({
                "name": name
            }, {$set: {picUrl: picUrl}}, {multi: true}, function (err) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null);
            })
        })
    })
};


//搜索功能
Post.search = function (keyword, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err)
        }
        db.collection('asks', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            var patten = new RegExp(keyword, 'i');
            collection.find({
                "askTitle": patten,
            }, {
                "name": 1,
                "time": 1,
                "askTitle": 1
            }).sort({
                time: -1
            }).toArray(function (err, docs) {
                mongo.close();
                if (err) {
                    return callback(err)
                }
                callback(null, docs);
            })
        })
    })
}